package org.algorithm.YaYa.链表;

import org.algorithm.biubiu.wheel_1.common.ListNode;
import org.junit.Test;

/**
 * @author
 * @Date 2022/2/22
 * @Link {https://leetcode-cn.com/problems/SLwz0R/}
 */
public class 删除链表的倒数第n个结点 {


    @Test
    public void test() {
        ListNode listNode = removeNthFromEnd(ListNode.build(1, 2), 2);
        System.out.println("listNode = " + listNode);
    }

   public ListNode removeNthFromEnd(ListNode head, int n) {
       //  建立一个哨兵节点
       ListNode prehead=new ListNode();
       prehead.next=head;
       // 建立两个快慢指针
       ListNode fast=prehead;
       ListNode slow=prehead;
       // 避免异常情况的发生
       if(head==null){
           return null;
       }

       // 先让快指针移动n个位置
       for(int i=1;i<=n;i++){
           fast=fast.next;
       }

       // 同时移动快慢指针
       while(fast.next!=null){
           fast=fast.next;
           slow=slow.next;
       }

       // 删除第n个节点
       slow.next=slow.next.next;

       return prehead.next;
    }
}
